6.1 Bindinger
Bindinger er i praksis globale variabler/parametre som man kan referere til på tvers av datasett. Dette gir deg mulighet til å generalisere/automatisere et skript. Bindinger defineres gjerne øverst i et skript gjennom kommandoen let
, og kan peke til en numerisk verdi, en streng (tekst), et symbol, en binding eller kombinasjoner av disse.
Et symbol er et konkret objekt som man senere vil referere til, vanligvis en variabel. Det trenger ikke nødvendigvis være en eksisterende variabel, men kan settes inn i et uttrykk hvor variabelen skal genereres. Symboler skal ikke angis med fnutter slik som strenger.
Et typisk bruksområde for bindinger er ved referanser til årstall eller datoer i forbindelse med import av variabler, tilrettelegging av variabler, kjøring av statistikk etc. Da kan man opprette en binding til et gitt år der hvor det er relevant, og dersom man finner ut at man vil kjøre for et annet år, justerer man bare på verdien til bindingen i stedet for alle steder i skriptet hvor årstallet befinner seg. I skriptet bruker man tegnet $
etterfulgt av navnet på bindingen der hvor man vil peke til bindingen.
Eksempler på definering av bindinger:
let varnavn = "inntekt"
let yyyy = 2021
let yy = $yyyy - 2000
let approx_pi = 22/7
Bruk help let
for den fulle syntaksbeskrivelsen for bindinger.
Man kan også benytte funksjoner som opererer kun på bindinger, også kalt prosedyrer, på denne måten:
let pi = pi()
let en = cos(2 * pi())
let dt3 = date_fmt($yyyy, 10, 20)
Bruk kommandoen help-procedure
for å lese om hvilke andre prosedyrer som er tilgjengelige.
Det er mulig å sette sammen og kombinere flere bindinger til ett uttrykk gjennom å bruke tegnene ++
. Dette tilsvarer å konkatenere verdier/tekst/symboler til ett samlet uttrykk. Merk at tall kombinert med tekst blir tekst. Eksempel:
let dato = $yyyy ++ "-01-01"
Eksempel på bruk av bindinger:
let dato = date_fmt(2021,08,01)
let siv = sivstand
import f/SIVSTANDFDT_SIVSTAND $dato as $siv
I eksempelet over benyttes prosedyren date_fmt()
. Dette er en svært nyttig prosedyre som genererer standard måletidspunktdatoer for import-kommandoer (på formen YYYY-MM-DD), og som kan brukes til å gjøre skriptet enda mer automatisert og strømlinjeformet. Eksempel:
let dt1 = date_fmt(2021)
let dt2 = date_fmt(2021, 10)
let dt3 = date_fmt(2021, 10, 20)
Kommandoene over genererer følgende datoverdier:
-
2021-01-01
-
2021-10-01
-
2021-10-20
Eksempler på hvordan generalisere datoer i et import-uttrykk:
let dato = $yyyy ++ "-01-01"
import f/SIVSTANDFDT_SIVSTAND $dato as sivstand
tilsvarer
import f/SIVSTANDFDT_SIVSTAND date_fmt($yyyy) as sivstand
Det kan være lurt å tenke seg om ved bruk av inline-bindinger (bruk av ++
), da koden kan bli vanskeligere å lese ved overdreven bruk. Eventuelle feilmeldinger kan også bli vanskeligere å forholde seg til. En tommelfingerregel er at man definerer en ferdigkonkatenert binding gjennom let
dersom denne brukes flere steder.
NB! Merk at bruk av inline-bindinger (
++
) ikke er kompatibelt med kommandoencollapse()
. Derfor bør du bruke bindinger gjennom bruk atlet
i forbindelse medcollapse()
-operasjoner.
Eksempel:
Merk at ++
har lavere presedens enn de matematiske operatorene +
og -
. Det betyr at uttrykket
generate gift = 1 if siv_ ++ $år + 2 == 1
er det samme som
generate gift = 1 if siv_ ++ ($år + 2) == 1